package h_10_22;

/**
 * 2461. 长度为 K 子数组中的最大和
 * https://leetcode.cn/problems/maximum-sum-of-distinct-subarrays-with-length-k/description/
 */
public class Main1 {
    public long maximumSubarraySum(int[] nums, int k) {
        int n = nums.length;
        // 使用Hash进行统计出现的次数
        HashMap<Integer,Integer> hash = new HashMap<>();
        int count = 0;
        long sum = 0;
        long ret = 0;
        for(int i = 0;i < n;i++) {
            // 入窗口
            sum += nums[i];
            // 更新次数
            hash.put(nums[i],hash.getOrDefault(nums[i],0) + 1);
            if(hash.get(nums[i]) == 1) {
                count++;
            }

            // 判断
            if(i < k - 1) {
                continue;
            }

            // 判断更新
            if(count == k) {
                // 更新
                ret = Math.max(ret,sum);
            }

            // 出窗口
            int out = nums[i - k + 1];
            sum -= out;
            hash.put(out,hash.get(out) - 1);
            if(hash.get(out) == 0) {
                count--;
            }
        }
        return ret;
    }
}
